/**
 * Copyright (2017, ) Institute of Software, Chinese Academy of Sciences
 * Copyright (2017, ) Bocloud Co,. Lmt
 */
package cn.abcsys.devops.core;

import java.util.Properties;

/**
 * @author wuheng@{otcaix.iscsa.ac.cn,beyondcent.com}
 * @date   May 19, 2017
 * <code>Monitor<code>的目的是获取操作系统和容器的监测数据，
 * 对于操作系统，主要是CPU、内存、网络和磁盘数据
 * 对于容器，主要是CPU、内存和网络数据
 */
public interface Monitor {

	/************************************************
	 * 
	 *                 核心功能
	 *
	 ************************************************/
	/**
	 * 
	 * @param uuid 查询标识符
	 * @param type 监测类型
	 * @param period 监测周期
	 * @param props
	 * @return
	 * @throws Exception
	 */
	public Object getMetrics(Object uuid, Monitor.Type type, 
						Monitor.Period period, Properties props) throws Exception;
	
	/************************************************
	 * 
	 *                 辅助功能
	 *
	 ************************************************/
	/**
	 * 监控类型
	 * 
	 * @author wuheng@{otcaix.iscsa.ac.cn,beyondcent.com}
	 * @date   May 19, 2017
	 *
	 */
	public static enum Type {
		/**
		 * 主机类型：包括物理主机、虚拟主机
		 */
		HOST,
		/**
		 * 主机类型：容器主机
		 */
		CONTAINER
	}
	
	/**
	 * 监测周期
	 * 
	 * @author wuheng@{otcaix.iscsa.ac.cn,beyondcent.com}
	 * @date   May 19, 2017
	 *
	 */
	public static enum Period {
		/**
		 * 监测周期：最近一小时
		 */
		LATEST_HOUR,
		/**
		 * 监测周期：最近一天
		 */
		LATEST_DAY,
		/**
		 * 监测周期：最近一周
		 */
		LATEST_WEEK,
		/**
		 * 监测周期：最近一月
		 */
		LATEST_Month,
		/**
		 * 监测周期：最近一年
		 */
		LATEST_YEAR
	}
}
